package rsa1;
//1.使用openssl生成pkcs8格式秘钥
//        私钥生成命令：
//
//        openssl genrsa -out private_pkcs1.pem 2048
//        ​
//        openssl pkcs8 -in private_pkcs1.pem -out private_pkcs8.pem -topk8 -nocrypt
//        公钥生成命令：
//
//        openssl rsa -in private_pkcs1.pem -pubout -out public.pem
//        使用时可直接提取文件里面的字符串秘钥，或者直接读取对应的秘钥文件。
//
//        通过已有的pfx证书文件提取公私钥命令：
//
//        openssl pkcs12 -in certificate_p12.pfx -out private_pkcs8.pem -nodes -nocerts
//        openssl rsa -in private_pkcs8.pem -pubout -out public.pem
//        2.生成pfx文件
//        1、生成key，openssl.key为key的名字随意起，1024为密钥长度
//
//        openssl genrsa -out openssl.key 1024
//        2、生成cer证书（openssl.key为之前生成的key的名字，openssl.cer为生成的证书名字，3650为证书过期天数，CN的参数***.website是的你主机名或者IP地址(这里一定要写对，不然以后访问的话，浏览器会提示有风险)。
//
//        openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=***.website
//        3、生成需要的pfx私钥文件（会让你输入密码，使用私钥时候使用的（千万不能忘记））
//
//        openssl pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer
//        4、生成crt证书（由于手机需要crt证书，所以需要的话还要生成crt）
//
//        openssl req -new -x509 -key openssl.key -out openssl.crt -days 3650
//        3.不同证书文件格式der、cer、pfx、pem区别
//        参考博客地址：https://blog.csdn.net/hqy1719239337/article/details/88896074
//
//        .*DER*：用二进制DER编码的证书；
//
//        .PEM：用ASCLL(BASE64)编码的证书；
//
//        .CER：存放公钥，没有私钥；
//
//        .PFX：存放公钥和私钥
//
//        （pem 后缀的证书都是base64编码；der 后缀的证书都是二进制格式；crt .cer 后缀的文件都是证书文件（编码方式不一定，有可能是.pem,也有可能是.der）；.pfx 主要用于windows平台，浏览器可以使用，也是包含证书和私钥，获取私钥需要密码才可以）
//
//        X509文件扩展名（x509 这种证书只有公钥，不包含私钥。）
//
//        4.转换方式
//        可以使用OpenSSL命令行工具在不同证书格式之间的转换
//
//        PEM to DER
//
//        openssl x509 -outform der -in certificate.pem -out certificate.der
//        PEM to PFX
//
//        openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
//        DER to PEM
//
//        openssl x509 -inform der -in certificate.cer -out certificate.pem
//        PFX to PEM
//
//        1
//        openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
public class DemoTest {
    public static void main(String[] args) throws Exception {

        RSAConfig config = new RSAConfig(Constants.PWD, Constants.ALIAS, Constants.PFX_PATH, Constants.CER_PATH);//读取配置文件的秘钥配置
        RSAUtil.configure(config);
        String id = "123456789";
        String encodeId = RSAUtil.doEncryptByRSA(id);
        String decodeId = RSAUtil.doDecryptByRSA(encodeId);
        System.out.println("encodeId="+encodeId);
        System.out.println("decodeId="+decodeId);

        String sign = RSAUtil.doSignBySHA1withRSA(id);
        System.out.println(sign);
        boolean verify = RSAUtil.doVerifyBySHA1withRSA(sign, id);
        System.out.println("verify result="+verify);
    }

}
